import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RepresentacaoIterativa {

    private List<Integer> c0 = new ArrayList<Integer>();
    private Map<Integer, Integer> c1 = new HashMap<Integer, Integer>();
    private Map<Integer, Integer> c2 = new HashMap<Integer, Integer>();
    private Map<Integer, Integer> c3 = new HashMap<Integer, Integer>();
    private Map<Integer, Integer> c4 = new HashMap<Integer, Integer>();
    private Map<Integer, Integer> c5 = new HashMap<Integer, Integer>();

    /**
     * Armazena o endereco incrementado nas ações na função C0.
     * 
     * @param endereco
     *            o número de endereço que será armazenado.
     */
    public void armazenaEnderecoAtualC0(int endereco) {
	c0.add(endereco);
    }

    /**
     * Armazena o valor que representa uma das operações disponíveis (teste,
     * atribuição, incremento, decremento).
     * 
     * @param operacao
     *            o enum que representa as operações.
     */
    public void armazenaOperacaoC1(int endereco, Operacoes operacao) {
	c1.put(endereco, operacao.getValor());
    }

    /**
     * Armazena no registrador de teste o valor zero ou o registrador que será
     * utilizado para incremento ou decremento.
     * 
     * @param valor
     *            o valor que será armazenado.
     */
    public void armazenaReceptorC2(int endereco, int valor) {
	c2.put(endereco, valor);
    }

    /**
     * Armazena o valor que será copiado o valor (sender).
     * 
     * @param valueOf
     */
    public void armazenaSenderC3(int endereco, int valor) {
	c3.put(endereco, valor);
    }

    /**
     * Armazena o valor do sucessor do endereço atual na função C4 (início ou
     * atualização do 'então').
     * 
     * @param sucessor
     *            o valor do sucessor que será armazenado.
     */
    public void armazenaSucessorC4(int enderecoAtual, int sucessor) {
	c4.put(enderecoAtual, sucessor);
    }

    public List<Integer> getC0() {
	return c0;
    }

    public Map<Integer, Integer> getC1() {
	return c1;
    }

    public Map<Integer, Integer> getC2() {
	return c2;
    }

    public Map<Integer, Integer> getC3() {
	return c3;
    }

    public Map<Integer, Integer> getC4() {
	return c4;
    }

    public Map<Integer, Integer> getC5() {
	return c5;
    }

}
